import { Router, RouteRecordName } from 'vue-router';
import { useRouterStore, useUserStore } from '@/store';
import { isLogin } from '@/utils/auth.ts';
import { isEmpty } from '@/utils/util.ts';

// 白名单路由
const whitePathList = ['/login'];

export function createPermissionGuard(router: Router) {
  router.beforeEach(async (to, from, next) => {
    // 如果未登录账号
    if (!isLogin()) {
      // 白名单路由地址直接跳转
      if (whitePathList.includes(to.path)) {
        console.log('PermissionGuard => 未登录直接跳转白名单页面');
        next();
        return;
      } else {
        console.log('PermissionGuard => 未登录不是白名单页面跳转登录页');
        next(`/login`)
        return;
      }
    }

    const userStore = useUserStore();
    // 如果未加载用户信息
    if (!userStore.id || userStore.id <= 0) {
      // 加载用户信息
      console.log('PermissionGuard => 加载用户信息');
      await userStore.loadInfo();
    }

    const routerStore = useRouterStore();
    // 加载动态路由
    if (isEmpty(routerStore.menuList)) {
      console.log('PermissionGuard => 加载路由');
      // 生成可访问的路由信息
      const routes = await routerStore.generateRoutes();

      // 动态添加可访问路由表
      routes.forEach((item) => {
        if (item.meta?.parentName) {
          // @ts-ignore
          router.addRoute(item.meta.parentName as RouteRecordName, item);
        } else {
          router.addRoute(item);
        }
      });
      // 路由加载完成 跳转到指定页面
      next({path: to.fullPath, replace: true, query: to.query});
      return;
    } else {
      // 已登录 如果还是登录页 直接跳转到首页
      if (to.path === '/login') {
        console.log('PermissionGuard => /login => /');
        next({path: '/'})
      } else {
        next();
      }
    }
  });
}
